package com.wx.gof.pattern.behavioral.state;

/**
 * @ClassName Application
 * @Author wx
 * @Description
 * 定义:
 * 允许一个对象在其内部状态改变时,改变它的行为
 * 描述:
 * 对象的行为包装在不同的状态对象里，每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候，
 * 其行为也随之改变。状态的转换基本上都是内部行为，主要在状态模式内部来维护。
 * 状态模式与策略模式的区别:
 * 1.状态是指不同状态下，他的行为不同-比如订单在未付款状态下可以进行付款操作，再关闭订单状态或者付款完毕的状态下，是没有付款操作的
 * 2.策略是同的一个行为拥有不同的实现-比如审批操作，不同模块对应审批操作，它的实现不一样
 * 适用场景:
 * 1.一个对象存在多个状态(不同状态下行为不同)且状态可互相转换
 * 优点:
 * 1.将不同状态的隔离
 * 2.把各种状态的转换逻辑,分布到State的子类中，减少相互间的依赖
 * 3.增加新的状态非常简单
 * 缺点:
 * 1.状态多的业务场景导致类目增加，系统变复杂
 * 理解:
 * 应用程序-状态设计模式(由内部改变状态，不同的状态当前的行为不一样)
 * @Date 2018-12-16-21:45
 */
public class Application {
    public static void main(String[] agrs){
        VideoStateContext videoStateContext = new VideoStateContext();
        videoStateContext.setVideoState(new StartState());
        videoStateContext.start();
        videoStateContext.speed();
        videoStateContext.suspend();
        videoStateContext.stop();
        videoStateContext.start();
        videoStateContext.suspend();
        videoStateContext.stop();
        videoStateContext.suspend();
        videoStateContext.speed();
    }
}
